Distributed Transactions এবং TransactionScope হল ডেটাবেস লেনদেনের ব্যবস্থাপনা করতে ব্যবহৃত শক্তিশালী টুলস, যা একাধিক ডেটাবেস বা সার্ভিসে ডেটা পরিবর্তন করার সময় ট্রানজেকশন নিশ্চিত করতে সহায়তা করে। এই টুলসগুলি মূলত ACID (Atomicity, Consistency, Isolation, Durability) গুণাবলী অনুসরণ করে, যা নিশ্চিত করে যে একটি ট্রানজেকশন সব অংশে সফলভাবে সম্পন্ন হবে বা কিছুই পরিবর্তন হবে না।
Distributed Transactions হল এমন একটি লেনদেন যা একাধিক ডেটাবেস বা অ্যাপ্লিকেশন পরিষেবার মধ্যে ছড়িয়ে থাকে। সাধারণত, যখন একাধিক ডেটাবেস সিস্টেম বা সার্ভিসে ডেটা পরিবর্তন করা হয় এবং সেই পরিবর্তনগুলো একসাথে কার্যকর হওয়া প্রয়োজন, তখন Distributed Transaction ব্যবহৃত হয়।
ডিস্ট্রিবিউটেড ট্রানজেকশন ব্যবস্থাপনা করার জন্য Two-Phase Commit Protocol (2PC) নামক একটি প্রোটোকল ব্যবহৃত হয়। এর মাধ্যমে ডিস্ট্রিবিউটেড সিস্টেমের প্রতিটি অংশ নিশ্চিত হয় যে ট্রানজেকশন সফলভাবে সম্পন্ন হয়েছে, না হলে পুরো লেনদেনটি বাতিল হয়ে যাবে।
TransactionScope হল .NET Framework-এর একটি ক্লাস যা একাধিক অপারেশনকে একক ট্রানজেকশনের অধীনে গ্রুপ করতে ব্যবহৃত হয়। এটি স্বয়ংক্রিয়ভাবে লেনদেন শুরু করে এবং শেষ করে, এবং যদি কোনো ত্রুটি ঘটে, তবে এটি পুরো ট্রানজেকশনটি রোলব্যাক করে দেয়। এটি সাধারণত Distributed Transactions-এ ব্যবহৃত হয়, তবে সাধারণ local transactions-এও ব্যবহার করা যায়।
TransactionScope ক্লাসটি একটি ট্রানজেকশনের সীমানা নির্ধারণ করতে সাহায্য করে এবং একটি একক ট্রানজেকশনের অধীনে একাধিক ডেটাবেস অপারেশন বা সার্ভিস কলের সমন্বয় ঘটায়।
Distributed Transactions এবং TransactionScope ব্যবহার করতে হলে প্রথমে কিছু সেটআপ এবং কনফিগারেশন প্রয়োজন হয়। নিচে TransactionScope ব্যবহার করে Distributed Transactions পরিচালনার উদাহরণ দেওয়া হলো:
ধরা যাক, আপনার একটি ASP.NET অ্যাপ্লিকেশন রয়েছে, যা দুটি ডেটাবেস সিস্টেমে ডেটা ইনসার্ট করবে। এখানে TransactionScope ক্লাস ব্যবহার করে ডিস্ট্রিবিউটেড ট্রানজেকশন পরিচালনা করা হয়েছে।
using System;
using System.Data.SqlClient;
using System.Transactions;
public class DistributedTransactionExample
{
public void ExecuteTransaction()
{
// TransactionScope তৈরি
using (TransactionScope scope = new TransactionScope())
{
try
{
// প্রথম ডেটাবেসে ইনসার্ট
using (SqlConnection connection1 = new SqlConnection("ConnectionString1"))
{
connection1.Open();
SqlCommand command1 = new SqlCommand("INSERT INTO Table1 (Column1) VALUES ('Data1')", connection1);
command1.ExecuteNonQuery();
}
// দ্বিতীয় ডেটাবেসে ইনসার্ট
using (SqlConnection connection2 = new SqlConnection("ConnectionString2"))
{
connection2.Open();
SqlCommand command2 = new SqlCommand("INSERT INTO Table2 (Column2) VALUES ('Data2')", connection2);
command2.ExecuteNonQuery();
}
// সব অপারেশন সফল হলে কমিট করা হবে
scope.Complete();
}
catch (Exception ex)
{
// কোনো ত্রুটি ঘটলে রোলব্যাক হবে
Console.WriteLine($"Error: {ex.Message}");
// TransactionScope এর অবস্থা রোলব্যাক হবে
}
}
}
}
এখানে:
scope.Complete()
মেথড কল করা হয়েছে, যা লেনদেনটি সফল হলে কমিট করবে।TransactionScope
ক্লাসটি কোডে কমপ্লেক্সিটি কমিয়ে দেয়। এটি ব্যবহারে কম কোড লিখতে হয় এবং ডেটাবেস অপারেশনগুলোর মধ্যে স্বয়ংক্রিয়ভাবে ট্রানজেকশন পরিচালিত হয়।TransactionScope
ম্যানেজমেন্টের মাধ্যমে লেনদেনের উন্নত পারফরম্যান্স পাওয়া যায়।Distributed Transactions এবং TransactionScope হল ডিস্ট্রিবিউটেড সিস্টেমে বা একাধিক ডেটাবেসের মধ্যে লেনদেন পরিচালনা করার শক্তিশালী টুলস। TransactionScope আপনাকে ডেটাবেস বা সিস্টেমে একাধিক অপারেশনকে একটি একক ট্রানজেকশনের অধীনে পরিচালনা করতে সাহায্য করে এবং যদি কোনো ত্রুটি ঘটে, তবে পুরো ট্রানজেকশন রোলব্যাক করে দেয়। এটি ডিস্ট্রিবিউটেড সিস্টেমে কাজ করার জন্য অপরিহার্য একটি কৌশল, বিশেষত তখন যখন একাধিক ডেটাবেস বা সার্ভিসে একযোগভাবে ডেটা আপডেট করতে হয়।
common.read_more